之前有版本,经过Prisma 的版本变更.做修改.Prisma的改变还比较大,但是登录的原理是不变的
OAuth 协议的认证和授权的过程如下:
1
. 用户打开我的应用,我想要通过GitHub获取改用户的基本信息
2
. 在转跳到GitHub的授权页面后,用户同意我获取他的基本信息
3
. 页面获得GitHub提供的授权码(githubCode),使用该授权码向GitHub申请一个令牌
4
. GitHub对博客提供的授权码进行验证,验证无误后,发放一个令牌(githubToken)给博客端
5
. 应用使用令牌,向GitHub获取用户信息
6
. GitHub 确认令牌无误,返回给我基本的用户信息
在本应用中,从github 中获取用户基本信息以后,在 prisma数据库中存储信息,并且返回给用于一个应用内的 token.后续应用内的操作通过这个 token换取用户信息进行操作
datamodel
1 | type User { |
schemamodel
1 | type Query { |
datamodel
定义了数据库要使用的 model, schemamodel
定义了要提供给用户使用的 API接口. 所以编程就围绕 schemamodel 展开
重点关注 authenticate 这个 model. 通过参数 githubCode获得用户的 token
获取 token 的代码
从 github 获取信息的代码的两个工具函数
1 | import * as fetch from 'isomorphic-fetch' |
从 prisma 获取用户信息的工具函数
在其他操作需要用户信息时,可以从 http 请求只能获取用户 token,换取用户信息,
1 | import * as jwt from 'jsonwebtoken' |
auth的 resolvers
1 | //Context是可以操作 prisma 数据库的句柄 |
执行其他操作时需要用户信息时的操作
下面操作由于,已经在 schemamodel 中定义了 user和 note 的关联关系, 只需要在 owner中关联 userID就可以了,其他信息可以灵活查询获取.
1 | mport { Context, getUserId, AuthError } from '../../utils' |